package com.hou.apizuul;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

//Zuul过滤器
@Component
public class TestZuulFilter extends ZuulFilter {//过滤器继承此类即可
    /**
     * 过滤器类型:
     *     类型可配置: pre post router error
     *                之前  代理或错误之后  代理时  错误时
     * @return
     */
    @Override
    public String filterType() {
        return "pre"; //配置之前过滤器
    }
    /**
     * 配置顺序,顺序越小,越先执行
     * 过滤器是链式调用,一个会取调下一个
     * @return
     */
    @Override
    public int filterOrder() {
        return 2;
    }
    //是否使用这个过滤器
    @Override
    public boolean shouldFilter() {
        return false;
    }
    //执行过滤操作
    @Override
    public Object run() throws ZuulException {
        System.out.println("------------前置过滤器执行-------------");
        //过滤器之间传递数据,原理是ThreadLocal
        RequestContext currentContext = RequestContext.getCurrentContext();
        currentContext.set("key","侯征");
        //下一个过滤器就可以或者到这个数据

        //拦截请求,并返回指定信息
        currentContext.setSendZuulResponse(false); //不需要讲当前请求转发到后端服务
        currentContext.setResponseBody("返回信息");
        //但是其他拦截器还是会正常执行,这时可以设置一个标识位,让后面过滤器判断时候启用
        currentContext.set("isFilter",false); //后面拦截器可以根据这个属性来设置shouldFilter的返回值
        return null;
    }
}
